﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Collections;

namespace LI4.Data
{
    class Empresa
    {
        private Ligacao ligacao;


        public Empresa()
        {
            ligacao = new Ligacao();
        }

        public int inserirEmpresa(Business.Empresa empr)
        {

            string descricao = "Empresa "+empr.Login.Username+" registou-se no sistema.";
            SqlParameter[] paramts = new SqlParameter[16];
            string data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            paramts[0] = new SqlParameter();
            paramts[0].ParameterName = "@return_value";
            paramts[0].SqlDbType = System.Data.SqlDbType.Int;
            paramts[0].Direction = System.Data.ParameterDirection.ReturnValue;

            paramts[1] = new SqlParameter("@username", empr.Login.Username);
            paramts[2] = new SqlParameter("@nome", empr.Nome);
            paramts[3] = new SqlParameter("@rua", empr.Rua);
            paramts[4] = new SqlParameter("@cod_postal", empr.CodPostal);
            paramts[5] = new SqlParameter("@telefone", empr.Telefone);
            paramts[6] = new SqlParameter("@mail", empr.Mail);
            paramts[7] = new SqlParameter("@area", empr.Area.Cod_Area);
            paramts[8] = new SqlParameter("@descricao", descricao);
            paramts[9] = new SqlParameter("@situacao", empr.Situacao);
            paramts[10] = new SqlParameter("@cod_localidade", empr.Localidade.CodLocalidade);
            paramts[11] = new SqlParameter("@password", empr.Login.Password);
            paramts[12] = new SqlParameter("@tipo", empr.Login.Tipo);
            paramts[13] = new SqlParameter("@registoD", descricao);
            paramts[14] = new SqlParameter("@data", data);
            paramts[15] = new SqlParameter("@userOp", empr.Login.Username);
            try
            {
                ligacao.runProcedure("dbo.inserirEmpresa", paramts);
            }
            catch { }

            return (int)ligacao.mySqlCommand.Parameters[0].Value;
        }


        public int update(Business.Empresa empr)
        {
            string descricao = "Editou empresa: " + empr.Login.Username + ".";
            SqlParameter[] paramts = new SqlParameter[16];
            string data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            paramts[0] = new SqlParameter();
            paramts[0].ParameterName = "@return_value";
            paramts[0].SqlDbType = System.Data.SqlDbType.Int;
            paramts[0].Direction = System.Data.ParameterDirection.ReturnValue;

            paramts[1] = new SqlParameter("@username", empr.Login.Username);
            paramts[2] = new SqlParameter("@nome", empr.Nome);
            paramts[3] = new SqlParameter("@rua", empr.Rua);
            paramts[4] = new SqlParameter("@cod_postal", empr.CodPostal);
            paramts[5] = new SqlParameter("@telefone", empr.Telefone);
            paramts[6] = new SqlParameter("@mail", empr.Mail);
            paramts[7] = new SqlParameter("@area", empr.Area.Cod_Area);
            paramts[8] = new SqlParameter("@descricao", empr.Descricao);
            paramts[9] = new SqlParameter("@situacao", empr.Situacao);
            paramts[10] = new SqlParameter("@cod_localidade", empr.Localidade.CodLocalidade);
            paramts[11] = new SqlParameter("@password", empr.Login.Password);
            paramts[12] = new SqlParameter("@tipo", empr.Login.Tipo);
            paramts[13] = new SqlParameter("@registoD", descricao);
            paramts[14] = new SqlParameter("@data", data);
            paramts[15] = new SqlParameter("@userOp", Program.Login.Username);
            try
            {
                ligacao.runProcedure("dbo.updateEmpresa", paramts);
            }
            catch { }

            return (int)ligacao.mySqlCommand.Parameters[0].Value;
        }

        public int remover(Business.Empresa empr)
        {
            string descricao = "Removeu empresa: " + empr.Login.Username + ".";
            SqlParameter[] paramts = new SqlParameter[7];
            string data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            paramts[0] = new SqlParameter();
            paramts[0].ParameterName = "@return_value";
            paramts[0].SqlDbType = System.Data.SqlDbType.Int;
            paramts[0].Direction = System.Data.ParameterDirection.ReturnValue;

            paramts[1] = new SqlParameter("@username", empr.Login.Username);
            paramts[2] = new SqlParameter("@situacao", empr.Situacao);
            paramts[3] = new SqlParameter("@tipo", empr.Login.Tipo);
            paramts[4] = new SqlParameter("@registoD", descricao);
            paramts[5] = new SqlParameter("@data", data);
            paramts[6] = new SqlParameter("@userOp", Program.Login.Username);

            try
            {
                ligacao.runProcedure("dbo.removerEmpresa", paramts);
            }
            catch { }

            return (int)ligacao.mySqlCommand.Parameters[0].Value;
        }

        public Business.Empresa getEmpresa(string username)
        {
            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade();
            Data.Area areaData = new Data.Area();

            Business.Empresa empresa = new LI4.Business.Empresa();
            Business.Login login = new LI4.Business.Login(log.getLogin(username));
            Business.Localidade local;
            Business.Area area;


            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Empresas where username='" + username + "';");

            reader = ligacao.mySqlDataReader;
            if (reader.Read())
            {
                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                string descricao = reader.GetString(6);
                int cod_area = reader.GetInt32(7);
                int situacao = reader.GetInt32(8);
                int cod_local = reader.GetInt32(9);

                reader.Close();

                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));
                area = new LI4.Business.Area(areaData.getArea(cod_area));

                empresa = new LI4.Business.Empresa(nome, mail, telefone, rua, cod_postal, local, descricao, area, situacao, login);

            }

            reader.Close();

            return empresa;

        }

        public bool existeEmpresa(string username)
        {
            SqlDataReader reader;

            ligacao.Select("SELECT username FROM Empresas where username='" + username + "';");
            reader = ligacao.mySqlDataReader;
            bool existe = reader.Read();
            reader.Close();

            return existe;
        }

        public ArrayList getEmpresas()
        {

            ArrayList array = new ArrayList();



            Data.Login log = new Data.Login();

            Data.Localidade localData = new Localidade();

            Data.Area areaData = new Data.Area();



            Business.Empresa empresa = new LI4.Business.Empresa();

            Business.Login login;

            Business.Localidade local;

            Business.Area area;





            SqlDataReader reader;



            ligacao.Select("SELECT * FROM Empresas ORDER BY username");



            reader = ligacao.mySqlDataReader;



            while (reader.Read())
            {

                string user = reader.GetString(0);

                string nome = reader.GetString(1);

                string rua = reader.GetString(2);

                string cod_postal = reader.GetString(3);

                int telefone = reader.GetInt32(4);

                string mail = reader.GetString(5);

                string descricao = reader.GetString(6);

                int cod_area = reader.GetInt32(7);

                int situacao = reader.GetInt32(8);

                int cod_local = reader.GetInt32(9);



                login = new LI4.Business.Login(log.getLogin(user));

                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));

                area = new LI4.Business.Area(areaData.getArea(cod_area));





                empresa = new LI4.Business.Empresa(nome, mail, telefone, rua, cod_postal, local, descricao, area, situacao, login);



                array.Add(empresa);

            }



            reader.Close();



            return array;



        }

        

        public Business.Empresa getEmpresaNome(string nomep)
        {
            
            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade();
            Data.Area areaData = new Data.Area();

            Business.Empresa empresa = new LI4.Business.Empresa();
            Business.Localidade local;
            Business.Area area;


            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Empresas where nome like'%" + nomep + "%';");

            reader = ligacao.mySqlDataReader;
            if (reader.Read())
            {
                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                string descricao = reader.GetString(6);
                int cod_area = reader.GetInt32(7);
                int situacao = reader.GetInt32(8);
                int cod_local = reader.GetInt32(9);


                reader.Close();
                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));
                area = new LI4.Business.Area(areaData.getArea(cod_area));

                Data.Login login1 = new Data.Login();
                Business.Login login = new Business.Login(login1.getLogin(user));
                empresa = new LI4.Business.Empresa(nome, mail, telefone, rua, cod_postal, local, descricao, area, situacao, login);

                
            }

            reader.Close();

            return empresa;

        }

        public ArrayList getEmpresasNome(string nomep)
        {
            ArrayList array = new ArrayList();
            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade();
            Data.Area areaData = new Data.Area();

            Business.Empresa empresa = new LI4.Business.Empresa();
            Business.Localidade local;
            Business.Area area;


            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Empresas where nome like'%"+nomep+"%';");

            reader = ligacao.mySqlDataReader;
            while (reader.Read())
            {
                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                string descricao = reader.GetString(6);
                int cod_area = reader.GetInt32(7);
                int situacao = reader.GetInt32(8);
                int cod_local = reader.GetInt32(9);

                

                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));
                area = new LI4.Business.Area(areaData.getArea(cod_area));

                Data.Login login1 = new Data.Login();
                Business.Login login = new Business.Login(login1.getLogin(user));
                empresa = new LI4.Business.Empresa(nome, mail, telefone, rua, cod_postal, local, descricao, area, situacao, login);

                array.Add(empresa);
            }

            reader.Close();

            return array;

        }


        public ArrayList getEmpresasUser(string usern)
        {
            ArrayList array = new ArrayList();
            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade();
            Data.Area areaData = new Data.Area();

            Business.Empresa empresa = new LI4.Business.Empresa();
            Business.Localidade local;
            Business.Area area;


            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Empresas where username='" + usern + "';");

            reader = ligacao.mySqlDataReader;
            while (reader.Read())
            {
                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                string descricao = reader.GetString(6);
                int cod_area = reader.GetInt32(7);
                int situacao = reader.GetInt32(8);
                int cod_local = reader.GetInt32(9);



                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));
                area = new LI4.Business.Area(areaData.getArea(cod_area));

                Data.Login login1 = new Data.Login();
                Business.Login login = new Business.Login(login1.getLogin(user));
                empresa = new LI4.Business.Empresa(nome, mail, telefone, rua, cod_postal, local, descricao, area, situacao, login);

                array.Add(empresa);
            }

            reader.Close();

            return array;

        }

        public Business.Empresa getEmpresaArea(int cod_area1)
        {

            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade();
            Data.Area areaData = new Data.Area();

            Business.Empresa empresa = new LI4.Business.Empresa();
            Business.Localidade local;
            Business.Area area;


            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Empresas where cod_area ='" + cod_area1 + "';");

            reader = ligacao.mySqlDataReader;
            if (reader.Read())
            {
                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                string descricao = reader.GetString(6);
                int cod_area = reader.GetInt32(7);
                int situacao = reader.GetInt32(8);
                int cod_local = reader.GetInt32(9);


                reader.Close();
                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));
                area = new LI4.Business.Area(areaData.getArea(cod_area));

                Data.Login login1 = new Data.Login();
                Business.Login login = new Business.Login(login1.getLogin(user));
                empresa = new LI4.Business.Empresa(nome, mail, telefone, rua, cod_postal, local, descricao, area, situacao, login);


            }

            reader.Close();

            return empresa;

        }

        public Business.Empresa getEmpresaLocalidade(int cod_localidade1)
        {

            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade();
            Data.Area areaData = new Data.Area();

            Business.Empresa empresa = new LI4.Business.Empresa();
            Business.Localidade local;
            Business.Area area;


            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Empresas where cod_localidade ='" + cod_localidade1 + "';");

            reader = ligacao.mySqlDataReader;
            if (reader.Read())
            {
                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                string descricao = reader.GetString(6);
                int cod_area = reader.GetInt32(7);
                int situacao = reader.GetInt32(8);
                int cod_local = reader.GetInt32(9);


                reader.Close();
                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));
                area = new LI4.Business.Area(areaData.getArea(cod_area));

                Data.Login login1 = new Data.Login();
                Business.Login login = new Business.Login(login1.getLogin(user));
                empresa = new LI4.Business.Empresa(nome, mail, telefone, rua, cod_postal, local, descricao, area, situacao, login);


            }

            reader.Close();

            return empresa;

        }

        public ArrayList getEmpresasLocalidade(int cod_localidade1)
        {
            ArrayList array = new ArrayList();
            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade();
            Data.Area areaData = new Data.Area();

            Business.Empresa empresa = new LI4.Business.Empresa();
            Business.Localidade local;
            Business.Area area;


            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Empresas where cod_localidade='" + cod_localidade1 + "'");

            reader = ligacao.mySqlDataReader;
            while (reader.Read())
            {
                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                string descricao = reader.GetString(6);
                int cod_area = reader.GetInt32(7);
                int situacao = reader.GetInt32(8);
                int cod_local = reader.GetInt32(9);



                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));
                area = new LI4.Business.Area(areaData.getArea(cod_area));

                Data.Login login1 = new Data.Login();
                Business.Login login = new Business.Login(login1.getLogin(user));
                empresa = new LI4.Business.Empresa(nome, mail, telefone, rua, cod_postal, local, descricao, area, situacao, login);

                array.Add(empresa);
            }

            reader.Close();

            return array;

        }


        public ArrayList getEmpresasArea(int cod_area1)
        {
            ArrayList array = new ArrayList();
            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade();
            Data.Area areaData = new Data.Area();

            Business.Empresa empresa = new LI4.Business.Empresa();
            Business.Localidade local;
            Business.Area area;


            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Empresas where cod_area ='" + cod_area1 + "';");

            reader = ligacao.mySqlDataReader;
            while (reader.Read())
            {
                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                string descricao = reader.GetString(6);
                int cod_area = reader.GetInt32(7);
                int situacao = reader.GetInt32(8);
                int cod_local = reader.GetInt32(9);



                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));
                area = new LI4.Business.Area(areaData.getArea(cod_area));

                Data.Login login1 = new Data.Login();
                Business.Login login = new Business.Login(login1.getLogin(user));
                empresa = new LI4.Business.Empresa(nome, mail, telefone, rua, cod_postal, local, descricao, area, situacao, login);

                array.Add(empresa);
            }

            reader.Close();

            return array;

        }

       
    }
}
